package com.shujia.wyh.day22.ketang;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
        有些时候，我们可以对异常去做处理，但是呢，有些时候，我们根本就没有权限去处理这些异常。
        或者说， 我们处理不了，就不处理了，交给更高权限的去处理。
        为了解决这样出错的问题，Java针对这种情况，就提供了另一种处理方案：抛出

        格式：
            throws 异常类名
            注意：这个格式必须跟在方法的小括号后面，大括号前面。
        注意：
            1、尽量不要在main方法上面抛出，因为main方法是由JVM调用的，如果出问题了，依旧是走默认的处理方式，
                而默认的处理方式，会将程序终止，后续代码不会执行，推荐能try..catch就try..catch
                （为了上课方便，后面的课程我就大部分在方法上抛出了）
            2、编译时期异常抛出，调用者必须要做处理，因为不做就没办法通过编译，就无法运行
            3、运行时期异常抛出，调用者可以不做处理，但是运行出了问题，程序终止，后续代码不会执行
                （推荐运行前检查代码逻辑，其次可以像处理编译时期异常一样try..catch）

       throw: 在方法内部抛出，后面跟上具体的异常对象

       （面试题：throw与throws的区别）}
            throws:
                用在方法的声明后面，后面跟的是异常的类名
                异常的类名可以是多个，多个类名之间使用逗号隔开
                表示将异常抛出，交给调用者去处理
                throws表示的是一种可能性，并不一定会发生这些异常

            throw:
                用在方法的内部，后面跟的是异常的对象;
                只能是一个对象,不能抛出多个
                表示抛出异常，由方法内部的语句体去做处理
                throw表示的是方法内部一定会出现某种异常，是确定的。


 */
public class ExceptionDemo5 {
    public static void main(String[] args) {
        try {
            function();
        } catch (ParseException e) {
            e.printStackTrace();
        }catch (ArithmeticException ae){
            ae.printStackTrace();
        }

//        function();

//        function2();

//        try {
//            function3();
//        }catch (ArithmeticException ae){
//            ae.printStackTrace();
//        }


        System.out.println("你好！！！");
    }

    public static void function3() {
        int a = 10;
//        int b = 2;
        int b = 0;
        if (b != 0) {
            System.out.println(a/b);
        }else {
            System.out.println("除数为0");
            //在方法内部抛出，抛出的是一个具体的对象，表示一定会出现这样的问题
            throw new ArithmeticException();
        }
    }


    public static void function2() throws ArithmeticException {
        int a = 10;
//        int b = 2;
        int b = 0;
//        if(b!=0){
//            System.out.println(a/b);
//        }else {
//            System.out.println("除数为0");
//        }
//        try {
//            System.out.println(a/b);
//        }catch (ArithmeticException ae){
//            ae.printStackTrace();
//        }

        System.out.println(a / b);
    }

    public static void function() throws ParseException,ArithmeticException {
        String s = "2020-04-06 16:08:00";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(s);

        int a = 10;
        int b = 0;
        System.out.println(a / b);
    }

}
